#ifndef STATUSBARMANAGER_H
#define STATUSBARMANAGER_H

#include <QObject>
#include <QStatusBar>
#include <QLabel>
#include <QPushButton>
#include <QProgressBar>
#include <QTimer>
#include <QHBoxLayout>
#include "app_version.h"
#include <QWidget>
#include <QPropertyAnimation>
#include <QEasingCurve>
#include "processingsettings.h"
#include "statusbarinfo.h"
#include "exportprogress.h"
#include "statusbarformatter.h"
// #include "exportstatemanager.h"  // 移除：使用MergedExportManager的GlobalExportState统一状态管理

class MainWindow;
class StreamingExportManager;

// ✅ 清理：移除ExportProgressInfo前向声明（已删除该结构体）

/**
 * 状态栏管理器
 * 负责管理主窗口状态栏的显示内容和交互功能
 */
class StatusBarManager : public QObject
{
    Q_OBJECT

public:
    explicit StatusBarManager(MainWindow* mainWindow, QStatusBar* statusBar, QObject* parent = nullptr);
    ~StatusBarManager();

    // 设置导出管理器
    void setStreamingExportManager(StreamingExportManager* exportManager);

    // Martin Fowler重构：移除setFileBrowserToExportManager（不再需要）

    // 状态显示更新 - Extract Method pattern
    void updateStatus(const StatusBarInfo& statusInfo);
    void updateFileInfo(int currentFileIndex, int totalFiles, const QString& fileName);
    // Martin Fowler重构：添加全局页码显示用于验证
    void updateCurrentGlobalPage(int currentGlobalPage, int totalPages);  // 新增：更新当前全局页码显示
    void updateTotalPages(int totalPages);  // 新增：更新文件总页数
    void updateProcessingSettings(const ProcessingSettings& settings);
    void updateCacheStatus(qint64 cacheSize, int cacheCount);
    void updateVersionInfo(const QString& currentVersion, const QString& serverVersion);
    void updateSystemStatus(const QString& status);

    // 导出状态更新
    void showExportStarted(int totalFiles, const QString& outputPath);
    void updateExportProgress(int completedFiles, int totalFiles, const QString& status);
    void showExportCompleted(const QString& outputPath);
    void showExportFailed(const QString& error);
    void showExportCancelled();
    
    // 用户活动检测
    void onUserActivity();

    // 文件处理状态同步
    void syncFileProcessingState();
    void startFileProcessingSync();  // 新增：启动文件处理状态同步

    // 🎯 四态按钮管理（新增）
    enum class ExportButtonState {
        Available,    // 蓝色"一键导出" - 可点击
        Disabled,     // 灰色"一键导出" - 不可点击
        Exporting,    // 红色"取消导出" - 可点击取消
        Cancelling    // 黄色"正在取消" - 不可点击
    };

    // 四态按钮管理接口
    void setExportButtonState(ExportButtonState state);
    ExportButtonState getExportButtonState() const;
    void updateExportButtonStateByFileAvailability(bool hasFiles);
    void handleExportButtonClick();  // 统一的按钮点击处理

    // 状态栏控制
    void showExportControls(bool show = true);
    void setExportAvailable(bool canExport);  // 新增：设置导出可用性（用于CustomFileBrowser信号）
    void setUpdateButtonState(bool hasUpdate);  // 设置更新按钮状态

    // 获取导出状态管理器 - 已移除，使用MergedExportManager的GlobalExportState统一状态管理
    // ExportStateManager* getExportStateManager() const { return m_exportStateManager; }

    // 登录状态指示
    void updateLoginStatus(bool isActive);

    
signals:
    // 用户交互信号
    void oneClickExportRequested();
    void updateRequested();  // 更新按钮点击信号
    // void exportSettingsRequested();  // 已移除
    // void cacheManagementRequested(); // 已移除
    
    // 面板切换信号
    void toggleFileListRequested();
    void togglePreviewRequested();
    
    // Toast信号 - 转发来自ExportStateManager
    void exportCompletedToast(const QString& message);
    void exportFailedToast(const QString& error);

    // 文件夹打开toast信号
    void folderOpenToast(const QString& message);

    // 导出状态信号
    void exportCancelled();

private slots:
    // 界面交互响应
    void onUpdateButtonClicked();  // 更新按钮点击
    void onUpdateIconButtonClicked();  // 更新图标按钮点击

    // ✅ 清理：移除updateDetailedExportProgress声明（不再使用三阶段进度）

    // void updateExportProgress(int completed, int total, const QString& status); // 重复声明已移除
    // void onExportSettingsClicked();  // 已移除
    // void onCacheManagementClicked(); // 已移除
    
    // 面板切换响应
    void onToggleFileListClicked();
    void onTogglePreviewClicked();
    
    // 文件夹图标响应
    void onFolderIconClicked();
    void onFolderBlinkTimeout();
    
    // 在线版本响应
    void openOnlineVersion();

    // Toast转发槽函数
    void forwardExportCompletedToast(const QString& message);
    void forwardExportFailedToast(const QString& error);

    // Martin Fowler重构：移除呼吸灯动画控制方法

    // 定时更新
    void updateStatusDisplay();

private:
    // 初始化状态栏控件
    void setupStatusWidgets();
    void setupExportControls();
    void setupSystemInfo();
    // Martin Fowler重构：移除initializeBreathingSystem

    // 状态栏布局管理
    void arrangeStatusBarItems();
    void updateStatusBarLayout();

    // Martin Fowler重构：Move Method - 格式化方法已迁移到StatusBarFormatter
    // QString formatPageInfo(int currentPage, int totalPages);     // 已移动
    // QString formatCacheInfo(qint64 size, int count);             // 已移动
    // QString formatExportSettings(const ProcessingSettings& settings); // 已移动
    // QString formatFileSize(qint64 bytes);                        // 已移动

    // 自绘图标方法
    QIcon createPdfExportIcon() const;
    QIcon createSplitPanelIcon(bool leftActive = true) const;
    QIcon createGlobeIcon() const;
    QIcon createFolderIcon() const;  // 文件夹图标
    QIcon createUpdateIcon() const;  // 软件更新图标
    QIcon createStatusIndicatorIcon(bool isActive) const;  // 登录状态指示图标
    // Martin Fowler重构：移除createBreathingIcon
    
    // 系统信息检测方法
    QString getSystemInfo() const;
    QString getCpuInfo() const;
    QString getMemoryInfo() const;

    // 主要组件引用
    MainWindow* m_mainWindow;
    QStatusBar* m_statusBar;
    StreamingExportManager* m_streamingExportManager;

    // 状态显示控件
    QLabel* m_settingsInfoLabel;    // 处理设置显示
    QLabel* m_cacheInfoLabel;       // 缓存信息显示
    QLabel* m_systemStatusLabel;    // 系统状态显示

    // 全局页码和总页数显示
    QLabel* m_currentGlobalPageLabel; // 当前全局页码显示
    QLabel* m_totalPagesLabel;        // 总页数显示

    // 版本更新相关控件（最左侧）
    QWidget* m_versionWidget;       // 版本信息容器
    QLabel* m_versionLabel;         // 版本信息标签
    QPushButton* m_updateIconButton; // 更新图标按钮

    // 导出控制控件
    QWidget* m_exportControlWidget;
    QPushButton* m_oneClickExportButton;
    QPushButton* m_folderIconButton;  // 文件夹图标按钮
    // QPushButton* m_exportSettingsButton;  // 已移除
    QProgressBar* m_exportProgressBar;
    // QLabel* m_exportStatusLabel;  // Martin Fowler重构：移除文字提示区域

    // 系统信息控件
    QWidget* m_systemInfoWidget;
    // QPushButton* m_cacheManagementButton; // 已移除
    
    // 面板切换按钮（添加到就绪面板中）
    QPushButton* m_toggleFileListButton;   // 切换文件列表按钮
    QPushButton* m_togglePreviewButton;    // 切换预览面板按钮
    
    // 在线版本按钮
    QPushButton* m_onlineVersionButton;    // 在线版本按钮

    // 登录状态指示按钮（最右侧）
    QPushButton* m_statusIndicatorButton;  // 登录状态指示水晶按钮
    bool m_isLoginStatusActive;            // 登录状态是否有效

    // Martin Fowler重构：移除呼吸灯动画系统
    
    // 文件夹图标闪烁动画
    QTimer* m_folderBlinkTimer;            // 文件夹闪烁定时器
    int m_folderBlinkCount;                // 闪烁次数计数
    QString m_lastExportPath;              // 最后导出的文件路径

    // 🔍 调试：进度监控定时器
    QTimer* m_progressMonitorTimer;        // 进度监控定时器
    qint64 m_lastProgressTime;             // 上次进度更新时间
    int m_lastProgressValue;               // 上次进度值

    // 状态数据 - Replace Data Clumps with Value Object
    StatusBarInfo m_currentStatus;
    QString m_originalSystemInfo;  // 存储原始系统信息，用于导出完成后恢复

    // 🎯 四态按钮管理（新增）
    ExportButtonState m_buttonState;
    QAtomicInt m_clickInProgress;        // 防重复点击
    quint64 m_lastClickTime;             // 防抖时间戳
    static const quint64 CLICK_DEBOUNCE_MS = 150;  // 防抖时间窗口

    // Martin Fowler重构：统一导出状态管理
    // ExportStateManager* m_exportStateManager; // 移除：使用MergedExportManager的GlobalExportState统一状态管理

    // 更新定时器
    QTimer* m_updateTimer;
    QTimer* m_fileProcessingSyncTimer; // 文件处理状态同步定时器

    // 布局管理
    bool m_compactMode;             // 紧凑模式
    void updateCompactMode();
    void setCompactMode(bool compact);
    
    // 响应式布局相关
    bool eventFilter(QObject* watched, QEvent* event) override;
    void updateResponsiveLayout();
    QList<QWidget*> m_hidingPriorityWidgets; // 隐藏优先级列表
    
    // 🎯 四态按钮管理私有方法（新增）
    bool canTransitionTo(ExportButtonState newState) const;
    void updateButtonUI(ExportButtonState state);
    bool shouldAllowClick() const;
    void processUserClick(ExportButtonState currentState);
    QString getButtonText(ExportButtonState state) const;
    QString getButtonStyle(ExportButtonState state) const;

    // 调试方法
    void debugExportButtonState();
    void debugSimpleExportState();
};

#endif // STATUSBARMANAGER_H